/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.usbcali.proyectofinal.logica;

import co.edu.usbcali.proyectofinal.dao.ITiposUsuariosDAO;
import co.edu.usbcali.proyectofinal.modelo.TiposUsuarios;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author alejandro
 */
@Scope("singleton")
@Service
public class TiposUsuariosLogica implements ITiposUsuariosLogica {

    @Autowired
    private ITiposUsuariosDAO tiposUsuariosDAO;

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void crearTipoUsuario(TiposUsuarios tiposUsuarios) throws Exception {

        if (tiposUsuarios == null) {
            throw new Exception("El tipo de documento es nulo");
        }

        if (tiposUsuarios.getTusuCodigo() == 0 || tiposUsuarios.getTusuCodigo() < 0) {
            throw new Exception("El codigo del tipo de documento debe ser mayor que cero");
        }

        if (tiposUsuarios.getTusuNombre() == null || tiposUsuarios.getTusuNombre().trim().equals("")) {
            throw new Exception("El nombre dle tipo de documento es obligatorio");
        }

        TiposUsuarios entity = tiposUsuariosDAO.consultarTipoUsuarioCodigo(tiposUsuarios.getTusuCodigo());

        if (entity != null) {
            throw new Exception("El tipo de documento ya existe");
        }

        tiposUsuariosDAO.modificarTipoUsuario(tiposUsuarios);
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void modificarTipoUsuario(TiposUsuarios tiposUsuarios) throws Exception {
        if (tiposUsuarios == null) {
            throw new Exception("El tipo de documento es nulo");
        }

        if (tiposUsuarios.getTusuCodigo() == 0 || tiposUsuarios.getTusuCodigo() < 0) {
            throw new Exception("El codigo del tipo de documento debe ser mayor que cero");
        }

        if (tiposUsuarios.getTusuNombre() == null || tiposUsuarios.getTusuNombre().trim().equals("")) {
            throw new Exception("El nombre dle tipo de documento es obligatorio");
        }

        TiposUsuarios entity = tiposUsuariosDAO.consultarTipoUsuarioCodigo(tiposUsuarios.getTusuCodigo());

        if (entity == null) {
            throw new Exception("El tipo de documento no existe");
        }

        entity.setTusuNombre(tiposUsuarios.getTusuNombre());
        tiposUsuariosDAO.modificarTipoUsuario(entity);
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void borrarTipoUsuario(TiposUsuarios tiposUsuarios) throws Exception {
        if (tiposUsuarios == null) {
            throw new Exception("El tipo de documento es nulo");
        }
        if (tiposUsuarios.getTusuCodigo() == 0) {
            throw new Exception("El codigo no puede ser cero");
        }

        TiposUsuarios entity = tiposUsuariosDAO.consultarTipoUsuarioCodigo(tiposUsuarios.getTusuCodigo());

        if (entity == null) {
            throw new Exception("El tipo de documento no existe");
        }
        tiposUsuariosDAO.borrarTipoUsuario(entity);
    }

    @Override
    @Transactional(readOnly = true)
    public TiposUsuarios consultarTipoUsuarioCodigo(long tusuCodigo) throws Exception {
        return tiposUsuariosDAO.consultarTipoUsuarioCodigo(tusuCodigo);
    }

    @Override
    @Transactional(readOnly = true)
    public List<TiposUsuarios> consultarTodosLosTiposUsuarios() throws Exception {
        return tiposUsuariosDAO.consultarTodosLosTiposUsuarios();
    }

}
